<?php

class ProdutosController extends AppController {

    public $name = 'Produtos';

    public function beforeFilter() {
        parent::beforeFilter();
//        $this->Auth->allow('index', 'view', 'add', 'edit', 'delete', 'viewHistorico', 'viewEstoque', 'search');
        $this->Auth->allow('search');
    }

    public function index() {
        $usuario = AuthComponent::user();
        $laboratorio_id = $usuario['laboratorio_id'];
        if ($usuario['cargo'] != 'admin') {
            $this->set('produtos', $this->Produto->find('all', array('conditions' =>
                        array(
                            'laboratorio_id = \'' . $laboratorio_id . '\'',
                            'is_residuo != 1',
                            'baixa != 1'),
                        'order' => array('nome_comercial', 'data_validade'))
            ));
        } else {
            $this->set('produtos', $this->Produto->find('all', array(
//                        'fields' => array('id', 'nome'),
                        'conditions' => array('baixa != 1', 'is_residuo != 1'),
                        'order' => array('nome_comercial', 'data_validade')
                            )
            ));
        }
//        $this->set('produtos', $this->Produto->find('all'), array('conditions' => ''));
    }

    public function add() {
        if ($this->request->is('post')) {
            $this->Produto->create();
            debug($this->request->data);
            if ($this->Produto->save($this->request->data)) {
                $this->Session->setFlash(__('Produto salvo com sucesso.'),'flash_ok');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('O produto não pôde ser salvo. Tente novamente.'),'flash_erro');
            }
        } else {
            $this->loadModel('Laboratorio'); //chamada do modelo referente a laboratorio
            $usuario = $this->Session->read('Auth.User');
            $laboratorio_id = $usuario['laboratorio_id'];
            if ($usuario['cargo'] != 'admin') {
                $this->set('laboratorios', $this->Laboratorio->find('list', array(
                            'fields' => array('id', 'nome'),
                            'conditions' => 'id = \'' . $laboratorio_id . '\'',
                            'order' => array('nome')
                                )
                )); //chamada para dropdown de laboratorio 
            } else { //admin
                $this->set('laboratorios', $this->Laboratorio->find('list', array(
                            'fields' => array('id', 'nome'),
                            'order' => array('nome')
                                )
                ));
            }
        }
    }

    public function edit($id = null) {
        $this->Produto->id = $id;
        if (!$this->Produto->exists()) {
            throw new NotFoundException(__('Produto não encontrado'));
        }
        if ($this->request->is('post') || $this->request->is('put')) {
            if ($this->Produto->save($this->request->data)) {
                $this->Session->setFlash(__('As informações do produto foram atualizadas.'),'flash_ok');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('As informações do produto não puderam ser atualizadas. Tente novamente.'),'flash_erro');
            }
        } else {
            $this->request->data = $this->Produto->read(null, $id);
        }
    }

//    public function delete($id = null) {
//        $this->request->onlyAllow('post');
//        $this->Produto->id = $id;
//        if (!$this->Produto->exists()) {
//            throw new NotFoundException(__('Produto inválido.'));
//        }
//        if ($this->Produto->delete()) {
//            $this->Session->setFlash(__('Produto removido com sucesso.'));
//            $this->redirect(array('action' => 'index'));
//        }
//        $this->Session->setFlash(__('O Produto não pôde ser deletado.'));
//        $this->redirect(array('action' => 'index'));
//    }
    public function viewHistorico() {
         $usuario = AuthComponent::user();
        $laboratorio_id = $usuario['laboratorio_id'];
        if ($usuario['cargo'] != 'admin') {
            $this->set('exibe_laboratorio', 0);
            $this->set('residuos', $this->Produto->find('all', array(
                        'conditions' => array('laboratorio_id = \'' . $laboratorio_id . '\'',
                            'is_residuo = 1'),
                        'order' => array('nome_comercial'))
            ));
        } else {
            $this->set('exibe_laboratorio', 1);
            $this->set('residuos', $this->Produto->find('all', array(
                        'fields' => array('Laboratorio.nome', 'Produto.*'),
                        'joins' => array(
                            array(
                                'table' => 'laboratorios',
                                'alias' => 'Laboratorio',
                                'type' => 'INNER',
                                'foreignKey' => 'laboratorio_id',
                                'conditions' => array(
                                    'Laboratorio.id = Produto.laboratorio_id')
                            )
                        ),
                        'conditions' => array('Produto.is_residuo = 1'),
                        'order' => array('nome_comercial')
                            )
            ));
        }
    }

    public function viewEstoque() {
        $usuario = AuthComponent::user();
        $laboratorio_id = $usuario['laboratorio_id'];
        if ($usuario['cargo'] != 'admin') {
            $this->set('exibe_laboratorio', 0);
            $this->set('residuos', $this->Produto->find('all', array(
                        'conditions' => array('laboratorio_id = \'' . $laboratorio_id . '\'',
                            'is_residuo = 1', 'baixa != 1'),
                        'order' => array('nome_comercial'))
            ));
        } else {
            $this->set('exibe_laboratorio', 1);
            $this->set('residuos', $this->Produto->find('all', array(
                        'fields' => array('Laboratorio.nome', 'Produto.*'),
                        'joins' => array(
                            array(
                                'table' => 'laboratorios',
                                'alias' => 'Laboratorio',
                                'type' => 'INNER',
                                'foreignKey' => 'laboratorio_id',
                                'conditions' => array(
                                    'Laboratorio.id = Produto.laboratorio_id')
                            )
                        ),
                        'conditions' => array('Produto.is_residuo = 1', 'baixa != 1'),
                        'order' => array('nome_comercial', 'data_validade')
                            )
            ));
        }
    }

    public function view($id = null) {
        $this->Produto->id = $id;
        if (!$this->Produto->exists()) {
            throw new NotFoundException(__('Produto inválido.'));
        }
        $this->set('produto', $this->Produto->read(null, $id));
        $this->loadModel('Laboratorio');
        $this->Laboratorio->id = $produto['Produto']['laboratorio_id'];
        $this->set('laboratorio', $this->Laboratorio->read());
    }

    public function search() {
        $this->Produto->recursive = 0;
        if ($this->request->is('get')) {
            $this->set('busca', $this->Produto->find('all', array(
                        'fields' => array('Produto.id', 'Produto.nome_cientifico', 'Produto.nome_comercial',
                            'Laboratorio.latitude', 'Laboratorio.longitude', 'Laboratorio.nome'),
                        'joins' => array(
                            array(
                                'table' => 'laboratorios',
                                'alias' => 'Laboratorio',
                                'type' => 'INNER',
                                'foreignKey' => 'laboratorio_id',
                                'conditions' => array(
                                    'Laboratorio.id = Produto.laboratorio_id')
                            )),
                        'conditions' => array(
                            'Produto.baixa != 1',
                            'Produto.is_residuo = 1')
                            )
                    )
            );
        } else
        if ($this->request->is('post')) {
            $nome_residuo = $this->request->data['Produto']['nome'];
            $this->set('busca', $this->Produto->find('all', array(
                        'fields' => array('Produto.id', 'Produto.nome_cientifico', 'Produto.nome_comercial',
                            'Laboratorio.latitude', 'Laboratorio.longitude', 'Laboratorio.nome'),
                        'joins' => array(
                            array(
                                'table' => 'laboratorios',
                                'alias' => 'Laboratorio',
                                'type' => 'INNER',
                                'foreignKey' => 'laboratorio_id',
                                'conditions' => array(
                                    'Laboratorio.id = Produto.laboratorio_id')
                            )),
                        'conditions' => array(
                            'OR' => array('LOWER(Produto.nome_comercial) LIKE LOWER("%' . $nome_residuo . '%")',
                                'LOWER(Produto.nome_cientifico) LIKE LOWER("%' . $nome_residuo . '%")'),
                            'Produto.is_residuo = 1')
                            )
                    )
            );
        } else {
            $this->set('busca', array());
        }
    }

    public function baixa($id = null) {
        
        $this->request->onlyAllow('post');
        $this->Produto->id = $id;
        $produto = $this->Produto->read();
        $produto['Produto']['is_residuo'] = '1';
        $reagente = $produto;
        if ($this->Produto->save($reagente)) {
            $this->Session->setFlash(__('O reagente agora é um resíduo.'), 'flash_ok');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('As informações do produto não puderam ser alteradas.'),'flash_erro');
        }
    }

    public function baixaResiduo($id = null) {

        if ($this->request->is('get')) {
            $this->Produto->id = $id;
            if (!$this->Produto->exists()) {
                throw new NotFoundException(__('Produto inválido.'));
            }
            $this->set('produto', $this->Produto->read());
            $this->loadModel('Laboratorio');
            $this->Laboratorio->id = $produto['Produto']['laboratorio_id'];
            $this->set('laboratorio', $this->Laboratorio->read());
        } else {
            $this->Produto->id = $this->request->data['Produto']['id'];
            $produto = $this->Produto->read();
            debug($this->request->data);
            $produto['Produto']['obs_baixa'] = $this->request->data['Produto']['obs_baixa'];
            $produto['Produto']['baixa'] = 1;
            if ($this->Produto->save($produto)) {
                $this->Session->setFlash(__('Baixa no resíduo efetuada com sucesso'));
                $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(__('A baixa no resíduo não pode ser realizada'));
            $this->redirect(array('action' => 'index'));
        }
    }

    public function isAuthorized($user) {
        if (!parent::isAuthorized($user)) {
            if (AuthComponent::user('cargo') === 'funcionario' && 
                    in_array($this->action, array('index', 'viewEstoque', 'viewHistorico', 'edit', 'baixa', 'view', 'baixaResiduo'))) {
                return true;
            }
        } else {
            return true;
        }
    }

}

?>
